package jmine.tec.services.test.services;

import jmine.tec.services.annotations.Execution;
import jmine.tec.services.annotations.Input;
import jmine.tec.services.annotations.ServiceImplementor;
import jmine.tec.services.annotations.SuffixOf;
import jmine.tec.services.annotations.WithPreffix;
import jmine.tec.services.annotations.WithRegex;
import jmine.tec.services.api.ActionsEnum;

/**
 * @author Marcio Ribeiro (mmr)
 * @created Sep 22, 2011
 */
@ServiceImplementor(action = ActionsEnum.INCLUIR)
public class CaracteresEstranhosTestService {
    public static final String CAMPO_OBRIGATORIO_COM_CHARS_ESTRANHOS = "Câmpó Õbrîgãtóríõ Çòm Çarâctêrés.Èsträñhôs";

    public static final String CAMPO_OBRIGATORIO_NORMALIZED = "CampoObrigatorioComCaracteresEstranhos";

    public static final String CAMPO_OPCIONAL_COM_CHARS_ESTRANHOS = "Câmpó Õpçíonâl Çòm Çarâctêrés.Èsträñhôs";

    public static final String CAMPO_OPCIONAL_NORMALIZED = "CampoOpcionalComCaracteresEstranhos";

    public static final String REGEX_PREFIXO = "Lêtrá Númerô ";

    private static final String REGEX = REGEX_PREFIXO + "\\s*(\\w+\\d+)\\s*";

    public static final String PREFFIX = "Prêfíxô ";

    public static final String SUFFIX = "Súfîxó ";

    private String campoObrigatorioComCharsEstranhos;

    private String campoOpcionalComCharsEstranhos;

    private String campoComRegex;

    private String campoComPreffix;

    private String campoComSuffixOf;

    /**
     * {@inheritDoc}
     */
    @Execution
    public void execute() {
        // do nothing
    }

    /**
     * @return valor do campo campoObrigatorioComCharsEstranhos.
     */
    public String getCampoObrigatorioComCharsEstranhos() {
        return campoObrigatorioComCharsEstranhos;
    }

    /**
     * Define valor para campo campoObrigatorioComCharsEstranhos.
     * 
     * @param campoObrigatorioComCharsEstranhos valor para campo campoObrigatorioComCharsEstranhos.
     */
    @Input(fieldName = CAMPO_OBRIGATORIO_COM_CHARS_ESTRANHOS)
    public void setCampoObrigatorioComCharsEstranhos(String campoObrigatorioComCharsEstranhos) {
        this.campoObrigatorioComCharsEstranhos = campoObrigatorioComCharsEstranhos;
    }

    /**
     * @return valor do campo campoOpcionalComCharsEstranhos.
     */
    public String getCampoOpcionalComCharsEstranhos() {
        return campoOpcionalComCharsEstranhos;
    }

    /**
     * Define valor para campo campoOpcionalComCharsEstranhos.
     * 
     * @param campoOpcionalComCharsEstranhos valor para campo campoOpcionalComCharsEstranhos.
     */
    @Input(fieldName = CAMPO_OPCIONAL_COM_CHARS_ESTRANHOS, required = false)
    public void setCampoOpcionalComCharsEstranhos(String campoOpcionalComCharsEstranhos) {
        this.campoOpcionalComCharsEstranhos = campoOpcionalComCharsEstranhos;
    }

    /**
     * @return valor do campo campoComRegex.
     */
    public String getCampoComRegex() {
        return campoComRegex;
    }

    /**
     * Define valor para campo campoComRegex.
     * 
     * @param campoComRegex valor para campo campoComRegex.
     */
    @WithRegex(regex = REGEX, groupIndex = 1, required = false)
    public void setCampoComRegex(String campoComRegex) {
        this.campoComRegex = campoComRegex;
    }

    /**
     * @return valor do campo campoComPreffix.
     */
    public String getCampoComPreffix() {
        return campoComPreffix;
    }

    /**
     * Define valor para campo campoComPreffix.
     * 
     * @param campoComPreffix valor para campo campoComPreffix.
     */
    @WithPreffix(preffix = PREFFIX, required = false)
    public void setCampoComPreffix(String campoComPreffix) {
        this.campoComPreffix = campoComPreffix;
    }

    /**
     * @return valor do campo campoComSuffixOf.
     */
    public String getCampoComSuffixOf() {
        return campoComSuffixOf;
    }

    /**
     * Define valor para campo campoComSuffixOf.
     * 
     * @param campoComSuffixOf valor para campo campoComSuffixOf.
     */
    @SuffixOf(preffix = SUFFIX, required = false)
    public void setCampoComSuffixOf(String campoComSuffixOf) {
        this.campoComSuffixOf = campoComSuffixOf;
    }
}
